package com.mdb.open.common.enums;
/*
 * Copyright (C), 2017-2019 澳发科技(MDB)
 * FileName: CustomerSequenceEnum.java
 * Author:   符楚
 * Date:     2019-07-05 12:01
 * History:
 * <author>          <time>          <version>          <desc>
 * 符楚               2019-07-05          V1.00             新建
 * -----------------------------------------------------------
 * 作者姓名           修改时间           版本号            描述
 */

import com.mdb.bc.cache.sequence.util.SequenceEnum;
import com.mdb.bc.utils.ExpireTypeEnum;
import com.mdb.open.common.enums.trade.type.TfSysBizNoTypeEnum;

import java.util.concurrent.TimeUnit;

/**
 * 贸易融资序列枚举对象
 * @author you.yichao
 * @Date 2019-07-05 12:01
 */
public enum TfSequenceEnum implements SequenceEnum {



    /**
     * 附件编号
     * 规则: TF+2位文件标识+时间戳+随机码
     * 说明: 上传文件时自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF99019070515400001
     * 时间戳取到分：201906251013
     * 文件标识：99
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    MERCHANT_ACC_NO("商户核心子账号", TfSysBizNoTypeEnum.DEFAULT.getNo()) {
        @Override
        public ExpireTypeEnum getExpireType() {
            return ExpireTypeEnum.NEVER;
        }

        @Override
        public String getPrefix() {
            return "";
        }

        @Override
        public int getIncrementLength() {
            return 8;
        }
    },


    /**
     * 商户号
     * 规则: MNO+时间戳+随机码
     * 说明: 创建商户时，系统为二级客户分配的唯一标识，与统一社会信用代码（证件号）一一对应。一个证件号在MDB系统只存在一个商户。
     * 举例说明:
     * ---------------------------------------
     * MNO2019062510136521
     * 时间戳取到分：201906251013
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    MERCHANT_NO("商户编号", TfSysBizNoTypeEnum.DEFAULT.getNo()) {
        @Override
        public String getDefaultPrefixStart() {
            return "MNO";
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }

        @Override
        public String getDateFormatPattern() {
            return "yyMMddHHmm";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }
    },


    /**
     * 附件编号
     * 规则: TF+2位文件标识+时间戳+随机码
     * 说明: 上传文件时自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF99019070515400001
     * 时间戳取到分：201906251013
     * 文件标识：99
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    ATTACH_NO("附件编号", TfSysBizNoTypeEnum.ATTACH_NO.getNo()) {
        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }

        @Override
        public String getDateFormatPattern() {
            return "yyyyMMddHHmm";
        }
    },

    /**
     * 商户银行账号唯一标识
     * 规则: TF+2位文件标识+时间戳+随机码
     * 说明: 上传文件时自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF98019070515400001
     * 时间戳取到分：201906251013
     * 文件标识：98
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    MERCHANT_BANK_ACC_UNIQUE_NO("商户银行账号唯一标识", TfSysBizNoTypeEnum.MERCHANT_BANK_ACC_UNIQUE_NO.getNo()) {
        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }

        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 10;
        }
    },

    /**
     * 融资申请编号
     * 规则: TF+2位业务标识+渠道+时间戳+随机码
     * 说明: 提交基础融资申请时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF80OP201907051540010001
     * 时间戳取到秒：20190625101301
     * 文件标识：80
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    APPLY_NO("融资申请编号", TfSysBizNoTypeEnum.APPLY_NO.getNo()) {
        @Override
        public String getDefaultPrefixStart() {
            return "TF" + this.title + dataChannelEnum.getChannelShort();
        }

        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 8;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 融资申请编号
     * 规则: TF+2位业务标识+渠道+时间戳+随机码
     * 说明: 提交基础融资申请时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF80OP201907051540010001
     * 时间戳取到秒：20190625101301
     * 文件标识：80
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    TRADE_FILE_NO("贸易档案编号", TfSysBizNoTypeEnum.TRADE_FILE_NO.getNo()) {
        @Override
        public String getDefaultPrefixStart() {
            return "TF" + this.title + dataChannelEnum.getChannelShort();
        }

        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 贸易档案商品编号
     * 规则: TF+2位业务标识+渠道+时间戳+随机码
     * 说明: 提交基础融资申请时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF80OP201907051540010001
     * 时间戳取到秒：20190625101301
     * 文件标识：80
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    TRADE_FILE_ITEM_NO("贸易档案商品编号", TfSysBizNoTypeEnum.TRADE_FILE_ITEM_NO.getNo()) {
        @Override
        public String getDefaultPrefixStart() {
            return "TF" + this.title + dataChannelEnum.getChannelShort();
        }

        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 贸易档案海关编号
     * 规则: TF+2位业务标识+渠道+时间戳+随机码
     * 说明: 提交基础融资申请时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF80OP201907051540010001
     * 时间戳取到秒：20190625101301
     * 文件标识：80
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    TRADE_FILE_CUSTOMS_NO("贸易档案海关编号", TfSysBizNoTypeEnum.TRADE_FILE_CUSTOMS_NO.getNo()) {
        @Override
        public String getDefaultPrefixStart() {
            return "TF" + this.title + dataChannelEnum.getChannelShort();
        }

        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 融资申请编号
     * 规则: TF+2位业务标识+渠道+时间戳+随机码
     * 说明: 提交基础融资申请时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF80OP201907051540010001
     * 时间戳取到秒：20190625101301
     * 文件标识：80
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    LOAN_INFO_HISTORY_NO("融资申请资料历史编号", TfSysBizNoTypeEnum.TRADE_FILE_ITEM_NO.getNo()) {
        @Override
        public String getDefaultPrefixStart() {
            return "TF" + this.title + dataChannelEnum.getChannelShort();
        }

        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 融资申请商品编号
     * 规则: TF+2位业务标识+渠道+时间戳+随机码
     * 说明: 提交基础融资申请时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF80OP201907051540010001
     * 时间戳取到秒：20190625101301
     * 文件标识：80
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    LOAN_INFO_ITEM_NO("融资申请商品信息记录编号", TfSysBizNoTypeEnum.LOAN_INFO_ITEM_NO.getNo()) {
        @Override
        public String getDefaultPrefixStart() {
            return "TF" + this.title + dataChannelEnum.getChannelShort();
        }

        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 融资申请商品历史编号
     * 规则: TF+2位业务标识+渠道+时间戳+随机码
     * 说明: 提交基础融资申请时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF80OP201907051540010001
     * 时间戳取到秒：20190625101301
     * 文件标识：80
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    LOAN_INFO_ITEM_HISTORY_NO("融资申请商品信息记录历史编号", TfSysBizNoTypeEnum.LOAN_INFO_ITEM_HISTORY_NO.getNo()) {
        @Override
        public String getDefaultPrefixStart() {
            return "TF" + this.title + dataChannelEnum.getChannelShort();
        }

        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 8;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 融资申请商品历史编号
     * 规则: TF+2位业务标识+渠道+时间戳+随机码
     * 说明: 提交基础融资申请时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF80OP201907051540010001
     * 时间戳取到秒：20190625101301
     * 文件标识：80
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    LOAN_INFO_CUSTOMS_HISTORY_NO("融资申请报关信息记录历史编号", TfSysBizNoTypeEnum.LOAN_INFO_CUSTOMS_HISTORY_NO.getNo()) {
        @Override
        public String getDefaultPrefixStart() {
            return "TF" + this.title + dataChannelEnum.getChannelShort();
        }

        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 8;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 借据单编号
     * 规则: TF+2位业务标识+时间戳+随机码
     * 说明: 生成借据单时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF70201907051540010001
     * 时间戳取到分：20190625101301
     * 文件标识：70
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    LOAN_CONTRACT_NO("借据单编号", TfSysBizNoTypeEnum.LOAN_CONTRACT_NO.getNo()) {
        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },



    /**
     * 放款单编号
     * 规则: TF+2位业务标识+时间戳+随机码
     * 说明: 贷款放款时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF60201907051540010001
     * 时间戳取到分：20190625101301
     * 文件标识：60
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    LOAN_REMIT_NO("贷款放款编号", TfSysBizNoTypeEnum.LOAN_REMIT_NO.getNo()) {
        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 放款流水单编号
     * 规则: TF+2位业务标识+时间戳+随机码
     * 说明: 贷款放款时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF60201907051540010001
     * 时间戳取到分：20190625101301
     * 文件标识：60
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    LOAN_REMIT_LOG_NO("放款流水单编号", TfSysBizNoTypeEnum.LOAN_REMIT_LOG_NO.getNo()) {
        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 8;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 还款单编号
     * 规则: TF+2位业务标识+时间戳+随机码
     * 说明: 生成还款单时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF50201907051540010001
     * 时间戳取到分：20190625101301
     * 文件标识：50
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    REPAYMENT_ORDER_NO("还款单编号", TfSysBizNoTypeEnum.REPAYMENT_ORDER_NO.getNo()) {
        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 还款汇款单编号
     * 规则: TF+2位业务标识+时间戳+随机码
     * 说明: 生成还款汇款单时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF51201907051540010001
     * 时间戳取到分：20190625101301
     * 文件标识：51
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    REPAYMENT_REMIT_ORDER_NO("还款汇款单编号", TfSysBizNoTypeEnum.REPAYMENT_REMIT_ORDER_NO.getNo()) {
        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 还款汇款流水单编号
     * 规则: TF+2位业务标识+时间戳+随机码
     * 说明: 生成还款汇款流水单时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF52201907051540010001
     * 时间戳取到分：20190625101301
     * 文件标识：52
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    REPAYMENT_REMIT_LOG_NO("还款汇款流水单编号", TfSysBizNoTypeEnum.REPAYMENT_REMIT_LOG_ORDER_NO.getNo()) {
        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 汇出编号
     * 规则: TF+2位业务标识+时间戳+随机码
     * 说明: 汇出时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF30201907051540010001
     * 时间戳取到分：20190625101301
     * 文件标识：30
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    OUTWARD_REMIT_NO("汇出编号", TfSysBizNoTypeEnum.OUTWARD_REMIT_NO.getNo()) {
        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },
    /**
     * 汇出编号
     * 规则: TF+2位业务标识+时间戳+随机码
     * 说明: 汇出时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF31201907051540010001
     * 时间戳取到分：20190625101301
     * 文件标识：31
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    OUTWARD_REMIT_LOG_NO("汇出流水编号", TfSysBizNoTypeEnum.OUTWARD_REMIT_LOG_NO.getNo()) {
        @Override
        public String getDefaultPrefixStart() {
            return "";
        }

        @Override
        public String getDateFormatPattern() {
            return "yyMMddHHmmss";
        }

        @Override
        public ExpireTypeEnum getExpireType() {
            return ExpireTypeEnum.DEFAULT;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.MINUTES;
        }

    },

    /**
     * 汇出订单编号
     * 规则: TF+2位业务标识+时间戳+随机码
     * 说明: 汇出时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF32201907051540010001
     * 时间戳取到分：20190625101301
     * 文件标识：30
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    OUTWARD_REMIT_ORDER_NO("汇出订单编号", TfSysBizNoTypeEnum.OUTWARD_REMIT_ORDER_NO.getNo()) {
        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 转账编号
     * 规则: TF+2位业务标识+时间戳+随机码
     * 说明: 转账时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF20201907051540010001
     * 时间戳取到分：20190625101301
     * 文件标识：20
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    TRANSFER_REMIT_NO("转账编号", TfSysBizNoTypeEnum.TRANSFER_REMIT_NO.getNo()) {
        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 转账流水编号
     * 规则: TF+2位业务标识+时间戳+随机码
     * 说明: 转账时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF21201907051540010001
     * 时间戳取到分：20190625101301
     * 文件标识：20
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    TRANSFER_REMIT_LOG_NO("转账流水编号", TfSysBizNoTypeEnum.TRANSFER_REMIT_LOG_NO.getNo()) {
        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 8;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 汇入编号
     * 规则: TF+2位业务标识+时间戳+随机码
     * 说明: 汇入时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF10201907051540010001
     * 时间戳取到分：20190625101301
     * 文件标识：10
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    INWARD_REMIT_NO("汇入编号", TfSysBizNoTypeEnum.INWARD_REMIT_NO.getNo()) {
        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },

    /**
     * 汇入认领编号
     * 规则: TF+2位业务标识+时间戳+随机码
     * 说明: 汇入时，系统自动分配编号
     * 举例说明:
     * ---------------------------------------
     * TF11201907051540010001
     * 时间戳取到分：20190625101301
     * 文件标识：10
     * 随机码：4位阿拉伯数字
     * ---------------------------------------
     */
    INWARD_CLAIM_REMIT_NO("汇入认领编号", TfSysBizNoTypeEnum.INWARD_CLAIM_REMIT_NO.getNo()) {
        @Override
        public String getDateFormatPattern() {
            return "yyMMdd";
        }

        @Override
        public int getIncrementLength() {
            return 6;
        }

        @Override
        public TimeUnit getExpireTimeUnit() {
            return TimeUnit.DAYS;
        }
    },



    ;


    String text;

    String title;

    TfSequenceEnum(String text, String title) {
        this.text = text;
        this.title = title;
    }

    /**
     * 数据渠道
     */
    DataChannelEnum dataChannelEnum = DataChannelEnum.API;

    public TfSequenceEnum setDataChannelEnum(DataChannelEnum dataChannelEnum) {
        this.dataChannelEnum = dataChannelEnum;
        return this;
    }



    /**
     * 默认前缀开始
     *
     * @return
     */
    @Override
    public String getDefaultPrefixStart() {
        return "TF" + this.title;
    }


    /**
     * 自定义日期格式
     * @return
     */
    @Override
    public String getDateFormatPattern() {
        return "yyyyMMddHHmmss";
    }


    /**
     * 过期时间
     * @return
     */
    @Override
    public Long getExpireTime() {
        return 1L;
    }

    /**
     * 过期单位
     *
     * @return
     */
    @Override
    public TimeUnit getExpireTimeUnit() {
        return TimeUnit.SECONDS;
    }

    @Override
    public ExpireTypeEnum getExpireType() {
        return ExpireTypeEnum.DAY;
    }




    @Override
    public String getSystemKey() {
        return "sys-trade-finance";
    }

    @Override
    public String getBusinessKey() {
        return this.name();
    }


}
